#pragma once

#include "../Headers/types.h"
#include "../Headers/authr.h"

#include "an.rpc.h"

#include <string>

namespace TOB {
  namespace AN {
    class Client : public TOB::AuthRequired {
    private:
      std::string ANHost;
      TOB::Nameserver::IP ANIP;
      User user;
      CLIENT* clnt;
      bool nsconnected;
      bool connected;
    public:
      /**
       * Конструктор
       * 
       */
      Client(TOB::Nameserver::IP nsip, std::string username, std::string password);
      
      /**
       * Деструктор
       * 
       */
      ~Client();
      
      /** 
       * Вход в систему
       * @return result  Код возврата
       */
      Code::Type login();

      /** 
       * Выход из системы
       * @return result  Код возврата
       */
      Code::Type logout();

      /** 
       * Вход в систему
       * @param result Указатель на результат
       * @return result  Код возврата
       */
      Code::Type online(bool& result);
      
      /** 
       * Проверка подключен ли клиент
       * @return (true - подключен, false - отключен)
       */
      bool isConnected();
    };
  }
}

